Transport Control Protocol (TCP) provides reliable data transmission with an embedded congestion control algorithm to remove congestion collapses in a network. This is accomplished by adjusting the packet sending rate to match availability network capacity (bandwidth). However, TCP fails to effectively utilize network resources in high speed and long distance networks.
TCP uses a sliding window and end-to-end acknowledgments to provide reliable data transfer in the Internet. The TCP sender maintains a congestion window (cwnd). The congestion window is a TCP state variable that provides congestion control, which effectively reduces the sending rate during the periods when the network is congested. That is, the congestion window that limits the amount of data that a TCP can send at any given time. The TCP sender can only send at most the minimum of cwnd and rwnd (receiver window) packets in the network before receiving an acknowledgment (ACK). TCP uses packet losses as indicates of congestion. Packet loss is detected either by the retransmission timeout or the receipt of several (three) duplicated acknowledgments (DupACK).
A TCP sender continuously updates the congestion window in response to acknowledgments of received data packets and the packet loss events. Specifically, for each acknowledgment received in a round trip time in which congestion has not been detected, TCP increases the congestion window in a linear way:cwnd=cwnd+1/cwnd  (1).If packet loss is detected, TCP decreases the congestion window multiplicatively as follows:cwnd=cwnd/2  (2).This process of increasing and decreasing cwnd ensure TCP to utilize the available bandwidth on a given end-to-end path while fairly sharing bandwidth among different flows during congestion period.
Study of TCP has shown that the steady state TCP window is a function to the average packet loss ratio. More specifically, the steady state TCP window is inverse proportional to the square root of the average packet loss ratio. Therefore, in high-speed and long distance network, where TCP must have large enough window to fill the network path, it requires an exceedingly small packet loss rate, e.g. 10−10. Such a small packet loss rate is practically unachievable. As a result, TCP can not efficiently utilize the high-speed network links.
Modifications on the congestion control algorithm of TCP can improve the transmission throughput. However, most of these modifications make the protocol more aggressive. When the modified protocol competes with other legacy TCP flows over a busy bottleneck. The modified one can gain much more bandwidth while the standard TCP flows may get worse performance or even starved. This TCP unfriendliness limits the use of such protocols in only special networks and requires substantial amounts of manual parameter tuning.